'''
枚举法 穷举法
枚举法是一种基本的算法设计技术，将所有能解决问题的办法都一一列举出来，直到找到办法为止
'''
# 水仙花数，三位数，每一位上数字的立方和，等于数字本身
# 五角星数，五位数，每一位上数字的五次方和，等于数字本身
for i in range(100,1000):
    a = i%10
    b = i//10%10
    c = i//100

    if a**3+b**3+c**3==i:
        print(i)
print("-------")

# for i in range(10000,100000):
#     str1= str(i)
#     a = int(str1[0])
#     b = int(str1[1])
#     c = int(str1[2])
#     d = int(str1[3])
#     e = int(str1[4])

'''
递归：函数内部，调用该函数，自己调自己
递归类似循环，但是比循环功能更强大，每个递归方法种必须设置出口

阶乘： 5！  5*4*3*2*1
jiecheng(n)
jiecheng(5) = jiecheng(4)*5
jiecheng(4) = jiecheng(3)*4
jiecheng(3) = jiecheng(2)*3
jiecheng(2) = jiecheng(1)*2
jiecheng(1) = 1  -->出口

回归：
jiecheng(1) = 1
jiecheng(2) = 1*2
jiecheng(3) = 2*3
jiecheng(4) = 6*4
jiecheng(5) = 24*5
'''
# 循环
def jiecheng1(n):
    ji = 1
    for i in range(1,n+1):
        ji *= i
    return ji
print(jiecheng1(5))

def jiecheng(n):
    if n > 1:
        return jiecheng(n-1) * n
    return 1

print(jiecheng(5))
